package com.cskaoyan.day4._01_review;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Common-zhou
 * @since 2023-03-02 09:48
 */
public class Demo1 {
    public static void main(String[] args) {
        //testSubList1();

        //testSubList2();

        testOOM();

    }

    private static void testOOM() {
        // 1. 循环10000次

        //  在循环内部，去生成一个100w大小的ArrayList
        // 添加数据

        List<List<String>> list = new ArrayList<>();

        for (int i = 0; i < 10000; i++) {

            // 生成100w大小的List
            List<String> list1 = new ArrayList<>(1_000_000);
            //List<String> list1 = new ArrayList<>(10);
            list1.add("zs");

            //IndexOutOfBoundsException
            List<String> subList = list1.subList(0, 1);

            list.add(subList);
        }

        // list里面保存了什么东西
        // 10000个数据
        //          每一个数据，是什么东西；100w大小的ArrayList


    }

    /**
     * 使用subList。需要注意，不要修改原有集合；否则会报并发修改异常的问题
     */
    private static void testSubList2() {
        List<String> list = new ArrayList<>();

        list.add("zs");
        list.add("ls");
        list.add("wu");
        list.add("zl");

        List<String> list1 = list.subList(0, 2);

        list.add("Java");

        String s = list1.get(0);
        System.out.println(s);


    }

    /**
     * subList是生成的一个映射。对这个生成的subList操作，其实是对原有集合操作
     */
    private static void testSubList1() {
        List<String> list = new ArrayList<>();

        list.add("zs");
        list.add("ls");
        list.add("wu");
        list.add("zl");

        // [0,1)
        List<String> list1 = list.subList(0, 1);
        System.out.println(list1);

        list1.add("Java");

        System.out.println(list1);
        System.out.println(list);

    }
}
